package org.easydev.base.webbase.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.ArrayList;
import java.util.Optional;

@Configuration
@EnableConfigurationProperties(CorsProperties.class)
public class CorsConfig implements WebMvcConfigurer {

    @Autowired
    private CorsProperties corsProperties;

    @Override
    public void addCorsMappings(CorsRegistry registry)
    {
        registry
                // 允许跨域访问的路径（/** 表示所有路径）
                .addMapping("/**")
                // 允许跨域访问的源（* 表示所有源，生产环境建议指定具体域名）
                .allowedOrigins(Optional.ofNullable(corsProperties.getAllowedOrigins()).orElse(new ArrayList<>()).toArray(new String[]{}))
                // 允许的请求方法（GET, POST, PUT, DELETE 等）
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                // 允许的请求头（* 表示所有头）
                .allowedHeaders("*")
                // 是否允许携带 Cookie（跨域请求默认不携带 Cookie，如需开启需指定具体 origin，不能用 *）
                .allowCredentials(true)
                // 预检请求的有效期（秒，在此期间无需再次发送预检请求）
                .maxAge(3600);
    }
}
